Ext.onReady(function(){
    Ext.Direct.addProvider(
        Ext.app.REMOTING_API,
        {
            type:'polling',
            url: 'php/poll.php'
        }
    );

    var out = new Ext.form.DisplayField({
        cls: 'x-form-text',
        id: 'out'
    });

    var text = new Ext.form.TextField({
        width: 300,
        emptyText: 'Echo input'
    });

    var call = new Ext.Button({
        text: 'Echo',
        handler: function(){
            TestAction.doEcho(text.getValue(), function(result, e){
                var t = e.getTransaction();
                out.append(String.format('

Successful call to {0}.{1} with response:

{2}

', t.action, t.method, Ext.encode(result))); out.el.scroll('b', 100000, true); }); } }); var num = new Ext.form.TextField({ width: 80, emptyText: 'Multiply x 8', style: 'text-align:left;' }); var multiply = new Ext.Button({ text: 'Multiply', handler: function(){ TestAction.multiply(num.getValue(), function(result, e){ var t = e.getTransaction(); if(e.status){ out.append(String.format('

Successful call to {0}.{1} with response:

{2}

', t.action, t.method, Ext.encode(result))); }else{ out.append(String.format('

Call to {0}.{1} failed with message:

{2}

', t.action, t.method, e.message)); } out.el.scroll('b', 100000, true); }); } }); text.on('specialkey', function(t, e){ if(e.getKey() == e.ENTER){ call.handler(); } }); num.on('specialkey', function(t, e){ if(e.getKey() == e.ENTER){ multiply.handler(); } }); var p = new Ext.Panel({ title: 'Remote Call Log', //frame:true, width: 600, height: 300, layout:'fit', items: [out], bbar: [text, call, '-', num, multiply] }).render(Ext.getBody()); Ext.Direct.on('message', function(e){ out.append(String.format('

{0}

', e.data)); out.el.scroll('b', 100000, true); }); });